package com.ruoyi.generator.util;
import org.apache.poi.ss.formula.functions.T;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.stream.IntStream;

public class ExcelUtil {
    private Class<T> clazz;

    public ExcelUtil(Class<T> clazz) {
        this.clazz = clazz;
    }

    // 导出数据到指定的工作表
    public void exportExcel(Sheet sheet, List<T> data) {
        if (data == null || data.isEmpty()) {
            return; // 如果没有数据，直接返回
        }

        // 创建标题行
        Row headerRow = sheet.createRow(0);
        String[] headers = getHeaders(); // 获取表头
        for (int i = 0; i < headers.length; i++) {
            Cell cell = headerRow.createCell(i);
            cell.setCellValue(headers[i]); // 设置表头单元格的值
        }

        // 填充数据行
        for (int i = 0; i < data.size(); i++) {
            Row dataRow = sheet.createRow(i + 1);
            T item = data.get(i);

            // 根据你的属性名称填充数据
            // 假设你有 name, age, description 等属性
            dataRow.createCell(0).setCellValue(getFieldValue(item, "name")); // 替换为实际字段名
            dataRow.createCell(1).setCellValue(getFieldValue(item, "age")); // 替换为实际字段名
            dataRow.createCell(2).setCellValue(getFieldValue(item, "description")); // 替换为实际字段名
        }
    }

    private String getFieldValue(T item, String fieldName) {
        try {
            return String.valueOf(clazz.getMethod("get" + capitalize(fieldName)).invoke(item));
        } catch (Exception e) {
            e.printStackTrace(); // 处理异常
            return ""; // 返回空字符串作为默认值
        }
    }

    private String capitalize(String str) {
        if (str == null || str.isEmpty()) return str;
        return str.substring(0, 1).toUpperCase() + str.substring(1);
    }

    // 获取表头，子类可以重写此方法以返回不同的表头
    protected String[] getHeaders() {
        return new String[]{"名称", "年龄", "描述"}; // 默认字段头，请根据需要修改
    }
}
